/*
* INSANE - Interactive Structural Analysis Environment
*
* Copyright (C) 2003-2005
* Universidade Federal de Minas Gerais
* Escola de Engenharia
* Departamento de Engenharia de Estruturas
* 
* Author's email :    insane@dees.ufmg.br
* Author's website :  http://www.dees.ufmg.br/insane
* 
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or any later version.
* 
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
* 
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
*/
package br.ufmg.dees.insane.util.numericalIntegration;

/**
*A class representing a AreaGaussPoint for Area coordinates.
*
*@author Lucas, Marcelo & Pitangueira, Roque
*@version 1.0
*@since May 2004
*/

/**
 * Class representing AreaGaussPoint
 * @author roque
 * @since Jul 25, 2005
 */
public class AreaGaussPoint extends IntegrationPoint
{
	
	/** The two dimensional array representing the area coordinates for this AreaGaussPoint. */
	private static final double[][] 
//Os valores entre chaves sao para xi_1, xi_2 e xi_3 respectivamente)
	areaGaussCoords = {
//para 1 ponto de Gauss 
	{0.3333333333, 0.3333333333, 0.3333333333},
//para 2 ponto de Gauss
	{0, 0, 0, 0, 0, 0},
//para 3 pontos de Gauss
	{0.5, 0.5, 0, 0, 0.5, 0.5, 0.5, 0, 0.5},
//para 4 pontos de Gauss
	{0.3333333333333, 0.3333333333333, 0.3333333333333, 0.6, 0.2, 0.2, 0.2, 0.6, 0.2, 0.2, 0.2, 0.6},
//para 5 pontos de Gauss
	{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
//para 6 pontos de Gauss
	{0.8168475730, 0.0915762135, 0.0915762135, 0.0915762135, 0.8168475730, 0.0915762135, 0.0915762135, 0.0915762135, 0.8168475730, 0.1081030182, 0.4459484909, 0.4459484909, 0.4459484909, 0.1081030182, 0.4459484909, 0.4459484909, 0.4459484909, 0.1081030182},
//para 7 pontos de Gauss
	{0.3333333333333, 0.3333333333333, 0.3333333333333, 0.0597158717, 0.4701420641, 0.4701420641, 0.4701420641, 0.0597158717, 0.4701420641, 0.4701420641, 0.4701420641, 0.0597158717, 0.7974269853, 0.1012865073, 0.1012865073, 0.1012865073, 0.7974269853, 0.1012865073, 0.1012865073, 0.1012865073, 0.7974269853},
//para 8 ponto de Gauss
	{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
//para 9 ponto de Gauss
	{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
//para 10 ponto de Gauss
	{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
//para 11 ponto de Gauss
	{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
//para 12 ponto de Gauss
	{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
//para 13 ponto de Gauss
	{0.8697397942, 0.0651301029, 0.0651301029, 0.0651301029, 0.8697397942, 0.0651301029, 0.0651301029, 0.0651301029, 0.8697397942, 0.6384441886, 0.312865496, 0.0486903154, 0.0486903154, 0.6384441886, 0.312865496, 0.312865496, 0.0486903154, 0.6384441886, 0.312865496, 0.6384441886, 0.0486903154, 0.0486903154, 0.312865496, 0.6384441886, 0.6384441886, 0.0486903154, 0.312865496, 0.4793080678, 0.2603459661, 0.2603459661, 0.2603459661, 0.4793080678, 0.2603459661, 0.2603459661, 0.2603459661, 0.4793080678, 0.3333333333, 0.3333333333, 0.3333333333}
};

	//pesos relacionados aos pontos de gauss
	/** The two dimensional array representing the weights related to the area coordinates for this AreaGaussPoint. */
	private static final double[][]
	//Ha somente um fator de peso para utilizar na integracao de coordenadas de area
	areaGaussWeights = {
	//para 1 ponto de Gauss
	{1},
	//para 2 pontos de Gauss
	{0, 0},
	//para 3 pontos de Gauss
	{0.3333333333, 0.3333333333, 0.3333333333},
	//para 4 pontos de Gauss
	{-0.5625, 0.52083333333, 0.52083333333, 0.52083333333},
	//para 5 pontos de Gauss
	{0, 0, 0, 0, 0},
	//para 6 pontos de Gauss
	{0.1099517437, 0.1099517437, 0.1099517437, 0.2233815897, 0.2233815897, 0.2233815897},
	//para 7 pontos de Gauss
	{0.225, 0.1323941527, 0.1323941527, 0.1323941527, 0.1259391805, 0.1259391805, 0.1259391805},
	//para 8 pontos de Gauss
	{0, 0, 0, 0, 0, 0, 0, 0},
	//para 9 pontos de Gauss
	{0, 0, 0, 0, 0, 0, 0, 0, 0},
	//para 10 pontos de Gauss
	{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
	//para 11 pontos de Gauss
	{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
	//para 12 pontos de Gauss
	{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
	//para 13 pontos de Gauss
	{0.0533472356088, 0.0533472356088, 0.0533472356088, 0.0771137608903, 0.0771137608903, 0.0771137608903, 0.0771137608903, 0.0771137608903, 0.0771137608903, 0.1756152574332, 0.1756152574332, 0.1756152574332, -0.1495700444677}

};
		
    /** Constructs an Area Gauss point */
    public AreaGaussPoint() {
        this.gaussCoords=areaGaussCoords;
        this.gaussWeights=areaGaussWeights;
    }
}
